home *** CD-ROM | disk | FTP | other *** search
- * Programmheader
- *
- * Name: Unknown2
- * Author: SDI
- * Distribution: PD
- * Description: XFD external decruncher for Unknown Cruncher 2
- * Compileropts: -
- * Linkeropts: -
- *
- * 1.0 19.01.99 : first version
-
- INCLUDE "AINCLUDE:IncDirs.i"
- INCLUDE "lvo.i"
-
- INCLUDE "libraries/xfdmaster.i"
- INCLUDE "exec/memory.i"
-
- * head function for tests
- * INCLUDE "xfdExeHead.a"
-
- ForeMan MOVEQ #-1,D0
- RTS
-
- DC.L XFDF_ID
- DC.W 1,0
- DC.L 0,0,Slave1
-
- DC.B "$VER: Unknown2 1.0 (19.01.1999) by SDI",0
- N_Unknown2 DC.B 'Unknown Cruncher 2',0
- EVEN
-
- Slave1 DC.L 0 ;no more slaves
- DC.W 2 ;version
- DC.W 36 ;master version
- DC.L N_Unknown2 ;name
- DC.W XFDPFF_ADDR ;flags
- DC.W 0
- DC.L RB_Unknown2 ;recog buffer
- DC.L DB_Unknown2 ;decrunch buffer
- DC.L 0 ;recog segment
- DC.L 0 ;decrunch segment
- DC.W 0,0
- DC.L $68 ;MinBufSize
-
- *************************************************************************
- * Recog buffer function: receives buffer + length in A0/D0 *
- *************************************************************************
-
- RB_Unknown2 MOVEQ #0,D0 ; False
-
- CMP.L #$014B47FA,$2C(A0)
- BNE.B .No
- CMP.L #$1600E80B,$3C(A0)
- BNE.B .No
- CMP.L #$1A802449,$50(A0)
- BNE.B .No
- CMP.L #$D3D8D1D8,$54(A0)
- BNE.B .No
- CMP.L #$E21767F4,$64(A0)
- BNE.B .No
- MOVEQ #1,D0 ; True
- .No RTS
-
- *************************************************************************
- * Decrunch buffer function: receives xfdbiBufferInfo in A0 *
- *************************************************************************
-
- DB_Unknown2 MOVEM.L A4-A6,-(A7)
- MOVE.L A0,A5
-
- MOVEA.L xfdbi_SourceBuffer(A5),A4
-
- MOVE.L $1BA(A4),D0
- MOVE.L D0,xfdbi_TargetBufSaveLen(A5)
- MOVE.L D0,xfdbi_TargetBufLen(A5)
- MOVE.L xfdbi_TargetBufMemType(A5),D1
- MOVE.L xfdm_ExecBase(A6),A6
- JSR _LVOAllocMem(A6)
- MOVE.W #XFDERR_NOMEMORY,xfdbi_Error(A5)
- MOVE.L D0,xfdbi_TargetBuffer(A5)
- BEQ.B .NoMem
-
- MOVE.L $26(A4),xfdbi_DecrAddress(A5)
- MOVE.L $18C(A4),xfdbi_JmpAddress(A5)
-
- MOVEM.L D2-D7/A2-A6,-(A7)
- LEA.L $1B6(A4),A0
- MOVEQ #0,D1
- MOVE.B (A0)+,D1
- MOVEA.L D1,A6 * num 4
- MOVE.B (A0)+,D1
- MOVEA.L D1,A5 * num 3
- MOVE.B (A0)+,D1
- MOVEA.L D1,A4 * num 2
- MOVE.B (A0)+,D1
- MOVE.L D1,D3
- LSR.B #4,D3
- ANDI.B #$F,D1 * num 1
- MOVEA.L D0,A1 * dest buffer
- MOVEA.L D0,A2
- ADDA.L (A0)+,A1 * dest buffer end
- ADDA.L (A0)+,A0 * source buffer end
- BSR.B Decrunch
- MOVEM.L (A7)+,D2-D7/A2-A6
-
- CLR.W xfdbi_Error(A5)
-
- MOVEQ #1,D0
- .NoMem MOVEM.L (A7)+,A4-A6
- RTS
-
- *************************************************************************
- * decrunch routine - copied from file (a bit modified) *
- *************************************************************************
-
- Decrunch
- L_3C MOVE.B -(A0),D7
- LEA Sub(PC),A3
- BEQ.B L_3C
- MOVE #$10,CCR
- L_44 ROXR.B #1,D7
- BEQ.B L_3C
- BCC.B L_44
- MOVEQ #0,D2
- L_4C LSR.W #1,D2
- BCS.B L_B4
- MOVEQ #1,D6
- JSR (A3)
- BEQ.B L_B4
- MOVEQ #1,D6
- JSR (A3)
- BEQ.B L_A6
- MOVEQ #2,D6
- JSR (A3)
- CMPI.B #3,D5
- BEQ.B L_6A
- ADDQ.W #1,D5
- BRA.B L_A6
- L_6A MOVEQ #2,D6
- JSR (A3)
- CMPI.B #3,D5
- BEQ.B L_78
- ADDQ.W #4,D5
- BRA.B L_A6
- L_78 MOVEQ #3,D6
- JSR (A3)
- CMPI.B #7,D5
- BEQ.B L_88
- ADDQ.W #7,D5
- BRA.B L_A6
- L_88 MOVE.L A5,D4 *****
- MOVE.L #$10E,D2
- BTST #2,D3
- BNE.B L_9E
- MOVEQ #1,D6
- JSR (A3)
- BNE.B L_A0
- MOVEQ #8,D4
- L_9E MOVEQ #$E,D2
- L_A0 MOVE.W D4,D6
- JSR (A3)
- ADD.L D2,D5
- L_A6 MOVE.W D5,D4
- L_A8 MOVE.B -(A0),-(A1)
- DBRA D4,L_A8
- MOVEQ #1,D2
- BRA.W L_164
- L_B4 MOVEQ #1,D6
- JSR (A3)
- BNE.B L_D2
- MOVEQ #8,D6
- JSR (A3)
- MOVEQ #2,D4
- L_C0 ADD.L D4,D5
- SUBQ.W #1,D4
- L_C4 MOVE.B -1(A1,D5.L),-(A1)
- DBRA D4,L_C4
- MOVEQ #0,D2
- BRA.W L_164
- L_D2 MOVEQ #2,D6
- JSR (A3)
- CMPI.B #3,D5
- BEQ.B L_114
- ADDQ.W #3,D5
- L_DE MOVE.L D5,D4
- MOVEQ #1,D6
- JSR (A3)
- BNE.B L_EC
- MOVEQ #6,D6
- JSR (A3)
- BRA.B L_C0
- L_EC MOVE.L A4,D6 *****
- BTST #0,D3
- BEQ.B L_FC
- MOVEQ #1,D6
- JSR (A3)
- BNE.B L_106
- MOVEQ #8,D6
- L_FC JSR (A3)
- ADDI.L #$40,D5
- BRA.B L_C0
- L_106 MOVE.L A4,D6 *****
- JSR (A3)
- ADDI.L #$140,D5
- BRA.B L_C0
- L_114 MOVEQ #3,D6
- JSR (A3)
- CMPI.B #7,D5
- BEQ.B L_122
- ADDQ.W #6,D5
- BRA.B L_DE
- L_122 MOVEQ #1,D6
- JSR (A3)
- BNE.B L_156
- MOVEQ #7,D4
- MOVEQ #5,D2
- BTST #1,D3
- BNE.B L_13E
- MOVEQ #1,D6
- JSR (A3)
- BNE.B L_140
- MOVE.L #$85,D2
- L_13E MOVE.L A6,D4 *****
- L_140 MOVE.W D4,D6
- JSR (A3)
- ADD.L D2,D5
- MOVE.L D5,D4
- MOVEQ #8,D6
- JSR (A3)
- L_14C MOVE.B D5,-(A1)
- SUBQ.L #1,D4
- BNE.B L_14C
- MOVEQ #0,D2
- BRA.B L_164
- L_156 MOVE.L D1,D6 *****
- JSR (A3)
- ADDI.L #$D,D5
- BRA.W L_DE
- L_164 CMPA.L A2,A1
- BGT.W L_4C
- RTS
-
- Sub MOVEQ #0,D5
- ANDI.W #$FF,D6
- SUBQ.W #1,D6
- .S1 LSR.B #1,D7
- BEQ.B .S3
- .S2 ROXL.L #1,D5
- DBRA D6,.S1
- TST.B D5
- RTS
- .S3 MOVE.B -(A0),D7
- MOVE #$10,CCR
- ROXR.B #1,D7
- BRA.B .S2
- END
-